読んだ: Pythonでスラスラわかる ベイズ推論「超」入門
ArviZ:ベイズ推論エンジンであるPyMCに対し、サンプリング結果を可視化・分析する目的で作られたライブラリ
PyMCのサンプリング結果配列をそのままブチ込めるっぽい
これまでベイズ推論何となくしか分からんかったが一気に解像度は上がった
ベイズ推論に対応するのは最尤推定と覚えておくと良さそう 実際に観測したデータ = この結果が最も起こりやすいので勾配降下法とか微分で最適解求める
これで「点」としてのハイパラが求まる
それに対して「分布」としてのハイパラを求めるのがベイズ推論(幅による予測)
不確かな予測したい案件に対して有益な情報を提供できる
もちろん最も確からしい値に固定したりも可能
観測数が小さいときに効いてくる手法(シミュレーションとの関連性)
PyMC
簡単に言ってしまえば確率モデル定義して、そこからサンプリングできるやつ
サンプリング結果をサマリすれば確率モデルのハイパラが求まってハッピー
確率的プログラミング言語とか小難しいこと書かれがち
確率的プログラミング言語:アルゴリズムを作るための数学的な導出を省くため(中略)確率モデルを記述すると自動的にMCMCや変分推論などの近似推論アルゴリズムを実行してくれるため、開発者はモデリングに集中することができます(ベイズ推論による機械学習入門) 数式に書いたコトそのものを書き下すように実装するので分かりやすい
やってることはそのまま確率モデル定義して、そこからサンプリングするだけ
https://scrapbox.io/files/659398a96213e90023c7100f.png
例えばアイリスデータセットを線形回帰する
線形回帰の各パラメータの事前分布を定義し確率モデルは正規分布を想定
その確率モデルからサンプリングを実施
https://scrapbox.io/files/65939d2f45aad70025843a04.png
ここでサンプリングできた値をsummaryすることで事前分布のパラメータ求まる
https://scrapbox.io/files/65939dad24dff600225ec815.png
事前分布
多分このパラメータはこんな分布から生成されているだろうという「主観」によって選択する
主観が含まれる理論は学問ではない!との批判を食らうポイント
もちろん実態に合うに越したことはないが、事前分布の設定が実態から外れている場合でも、多くの観測値を入手できれば、事前分布の設定によらず最終的に得られる事後分布は一致していくとのこと
確率モデル定義
確率モデルも実態に合っているものを選べると少ない観測値で効率よく予測や分析が行える
サンプリング
sample関数によって実現
sampleの裏側のアルゴリズムはMCMCになっている サンプリングによってハイパラ(mu, sigma)の確率分布が導出される
普通に確率分布からのサンプリング(疑似乱数)Scipyとかとはちゃいますねもちろん 変分推論
サンプリングは計算コストが高いので、代替的にコストを下げられる手段